﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using CNLTHD_GoogleMapAPI_DTO;
namespace CNLTHD_GoogleMapAPI_DAO
{
	public class NguoiDungDAO
	{
		public static List<NguoiDung> LayDanhSachNguoiDung()
		{
			OleDbConnection ketNoi = ConnectingClass.KetNoi();

			if (ketNoi == null)
			{
				return null;
			}

			string truyVan = @"SELECT n.MaNguoiDung, n.TenTaiKhoan, n.MatKhau, n.HoTen
								FROM NGUOI_DUNG n";

			OleDbCommand cmd = new OleDbCommand(truyVan, ketNoi);
			
			List<NguoiDung> danhSach = new List<NguoiDung>();
			try
			{
				OleDbDataReader reader = cmd.ExecuteReader();
				
				while (reader.Read())
				{
					int maNguoiDung = reader.GetInt32(0);
					string tenTaiKhoan = !reader.IsDBNull(1) ? reader.GetString(1) : "";
					string matKhau = !reader.IsDBNull(2) ? reader.GetString(2) : "";
					string hoTen = !reader.IsDBNull(3) ? reader.GetString(3) : "Chưa đặt tên";

					
					NguoiDung nd = new NguoiDung { TenTaiKhoan = tenTaiKhoan, MaNguoiDung = maNguoiDung, HoTen = hoTen, MatKhau = matKhau };


					danhSach.Add(nd);
				}
			}
			catch (System.Exception ex)
			{
				throw new Exception("Lấy danh sách người dùng bị lỗi");
				ketNoi.Close();
				return null;
			}
			finally
			{
			}

			ketNoi.Close();
			return danhSach;
		}

		public static NguoiDung LayNguoiDung(int maNguoiDung)
		{
			OleDbConnection ketNoi = ConnectingClass.KetNoi();

			if (ketNoi == null)
			{
				return null;
			}

			string truyVan = @"SELECT n.MaNguoiDung, n.TenTaiKhoan, n.MatKhau, n.HoTen
								FROM NGUOI_DUNG n WHERE n.MaNguoiDung = @MaNguoiDung";

			OleDbParameter thamSoMaNguoiDung = new OleDbParameter("@MaNguoiDung", maNguoiDung);
			OleDbCommand cmd = new OleDbCommand(truyVan, ketNoi);
			cmd.Parameters.Add(thamSoMaNguoiDung);

			NguoiDung nd = null;
			try
			{
				OleDbDataReader reader = cmd.ExecuteReader();

				while (reader.Read())
				{
					maNguoiDung = reader.GetInt32(0);
					string tenTaiKhoan = !reader.IsDBNull(1) ? reader.GetString(1) : "";
					string matKhau = !reader.IsDBNull(2) ? reader.GetString(2) : "";
					string hoTen = !reader.IsDBNull(3) ? reader.GetString(3) : "Chưa đặt tên";
					
					nd = new NguoiDung { TenTaiKhoan = tenTaiKhoan, MaNguoiDung = maNguoiDung, HoTen = hoTen, MatKhau = matKhau };
				}
			}
			catch (System.Exception ex)
			{
				throw new Exception("Lấy danh sách người dùng bị lỗi");
				ketNoi.Close();
				return null;
			}
			finally
			{
			}

			ketNoi.Close();
			return nd;
		}

		public static NguoiDung LayNguoiDung(string tenTaiKhoan)
		{
			if (!KiemTraDoiTuongHopLe.KiemTraTenTaiKhoan(tenTaiKhoan))
			{
				throw new Exception("Tên tài khoản không đúng qui định");
				return null;
			}

			OleDbConnection ketNoi = ConnectingClass.KetNoi();

			if (ketNoi == null)
			{
				return null;
			}

			string truyVan = @"SELECT n.MaNguoiDung, n.TenTaiKhoan, n.MatKhau, n.HoTen
								FROM NGUOI_DUNG n WHERE n.TenTaiKhoan = @TenTaiKhoan";

			OleDbParameter thamSoTenNguoiDung = new OleDbParameter("@TenTaiKhoan", tenTaiKhoan);
			OleDbCommand cmd = new OleDbCommand(truyVan, ketNoi);
			cmd.Parameters.Add(thamSoTenNguoiDung);

			NguoiDung nd = null;
			try
			{
				OleDbDataReader reader = cmd.ExecuteReader();

				while (reader.Read())
				{
					int maNguoiDung = reader.GetInt32(0);
					tenTaiKhoan = !reader.IsDBNull(1) ? reader.GetString(1) : "";
					string matKhau = !reader.IsDBNull(2) ? reader.GetString(2) : "";
					string hoTen = !reader.IsDBNull(3) ? reader.GetString(3) : "Chưa đặt tên";

					nd = new NguoiDung { TenTaiKhoan = tenTaiKhoan, MaNguoiDung = maNguoiDung, HoTen = hoTen, MatKhau = matKhau };
				}
			}
			catch (System.Exception ex)
			{
				throw new Exception("Lấy danh sách người dùng bị lỗi");
				ketNoi.Close();
				return null;
			}
			finally
			{
			}

			ketNoi.Close();
			return nd;
		}

	

	
		public static bool ThemNguoiDung(string tenTaiKhoan, string matKhau, string hoTen = "Không tên")
		{
			
			if (!KiemTraDoiTuongHopLe.KiemTraTenTaiKhoanMatKhau(tenTaiKhoan, matKhau))
			{
				throw new Exception("Tên tài khoản, Mật khẩu không đúng qui định");
				return false;
			}

			if (KiemTraDoiTuongHopLe.TaiKhoanDaTonTai(tenTaiKhoan))
			{
				throw new Exception("Tên tài khoản đã tồn tại");
				return false;
			}

			if (hoTen == null)
			{
				hoTen = "Không tên";
			}

			OleDbConnection ketNoi = ConnectingClass.KetNoi();

			if (ketNoi == null)
			{
				return false;
			}

			string truyVan = @"INSERT INTO Nguoi_Dung(TenTaiKhoan, MatKhau, HoTen) 
								VALUES (@TenTaiKhoan, @MatKhau, @HoTen)";
			OleDbParameter thamSoTenTaiKhoan = new OleDbParameter("@TenTaiKhoan", tenTaiKhoan);
			OleDbParameter thamSoMatKhau = new OleDbParameter("@MatKhau", matKhau);
			OleDbParameter thamSoHoTen = new OleDbParameter("@HoTen", hoTen);
			OleDbCommand cmd = new OleDbCommand(truyVan, ketNoi);
			cmd.Parameters.Add(thamSoTenTaiKhoan);
			cmd.Parameters.Add(thamSoMatKhau);
			cmd.Parameters.Add(thamSoHoTen);

			try
			{
				int result = cmd.ExecuteNonQuery();

				if (result >= 1)
				{
					ketNoi.Close();
					return true;
				}
				else
				{
					ketNoi.Close();
					return false;
				}
			}
			catch (System.Exception ex)
			{
				throw new Exception("Thêm danh sách người dùng bị lỗi");
				ketNoi.Close();
				return false;
			}
			finally
			{
			}

			ketNoi.Close();
			return true;
		}

		public static bool ThemNguoiDung(NguoiDung nd)
		{
			return ThemNguoiDung(nd.TenTaiKhoan, nd.MatKhau, nd.HoTen);
		}
	}
}
